package org.ss.psci.dao;

import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.ss.psci.entity.PmProjects;
import org.ss.psci.entity.PmStorageDetails;

/**
 * Data access object (DAO) for domain model class PmStorageDetails.
 * 
 * @see org.ss.psci.entity.PmStorageDetails
 * @author MyEclipse Persistence Tools
 */

public class PmStorageDetailsDAO extends HibernateDaoSupport {
	private static final Log log = LogFactory.getLog(PmStorageDetailsDAO.class);
	// property constants
	public static final String NAME = "name";
	public static final String REMARK = "remark";
	public static final String TOTAL = "total";
	public static final String PRICE = "price";
	public static final String GOODS_SEQ = "goodsSeq";
	public static final String CT_TIME = "ctTime";
	public static final String BUYER = "buyer";
	public static final String PRODUCER = "producer";
	public static final String DETAIL_SEQ = "detailSeq";
	public static final String STORAGE_TYPE = "storageType";

	public PmStorageDetails copyEntity(PmStorageDetails dest, PmStorageDetails orig) {
		if (dest == null || orig == null) {
			return new PmStorageDetails();
		}
		if (orig.getName() != null) {
			dest.setName(orig.getName());
		}
		if (orig.getTotal() != null) {
			dest.setTotal(orig.getTotal());
		}
		if (orig.getPrice() != null) {
			dest.setPrice(orig.getPrice());
		}
		if (orig.getGoodsSeq() != null) {
			dest.setGoodsSeq(orig.getGoodsSeq());
		}
		if (orig.getCtTime() != null) {
			dest.setCtTime(orig.getCtTime());
		}if (orig.getBuyer() != null) {
			dest.setBuyer(orig.getBuyer());
		}if (orig.getProducer() != null) {
			dest.setProducer(orig.getProducer());
		}
		if (orig.getDetailSeq() != null) {
			dest.setDetailSeq(orig.getDetailSeq());
		}if (orig.getStorageType() != null) {
			dest.setStorageType(orig.getStorageType());
		}
		if (orig.getRemark() != null) {
			dest.setRemark(orig.getRemark());
		}
		return dest;
	}
	
	protected void initDao() {
		// do nothing
	}

	public void save(PmStorageDetails transientInstance) {
		log.debug("saving PmStorageDetails instance");
		try {
			getHibernateTemplate().saveOrUpdate(transientInstance);
			log.debug("save successful");
		} catch (RuntimeException re) {
			log.error("save failed", re);
			throw re;
		}
	}

	public void delete(PmStorageDetails persistentInstance) {
		log.debug("deleting PmStorageDetails instance");
		try {
			getHibernateTemplate().delete(persistentInstance);
			log.debug("delete successful");
		} catch (RuntimeException re) {
			log.error("delete failed", re);
			throw re;
		}
	}

	public PmStorageDetails findById(java.lang.Integer id) {
		log.debug("getting PmStorageDetails instance with id: " + id);
		try {
			PmStorageDetails instance = (PmStorageDetails) getHibernateTemplate()
					.get("org.ss.psci.entity.PmStorageDetails", id);
			return instance;
		} catch (RuntimeException re) {
			log.error("get failed", re);
			throw re;
		}
	}

	public List findByExample(PmStorageDetails instance) {
		log.debug("finding PmStorageDetails instance by example");
		try {
			List results = getHibernateTemplate().findByExample(instance);
			log.debug("find by example successful, result size: "
					+ results.size());
			return results;
		} catch (RuntimeException re) {
			log.error("find by example failed", re);
			throw re;
		}
	}

	public List findByProperty(String propertyName, Object value) {
		log.debug("finding PmStorageDetails instance with property: "
				+ propertyName + ", value: " + value);
		try {
			String queryString = "from PmStorageDetails as model where model."
					+ propertyName + "= ?";
			return getHibernateTemplate().find(queryString, value);
		} catch (RuntimeException re) {
			log.error("find by property name failed", re);
			throw re;
		}
	}

	public List findByName(Object name) {
		return findByProperty(NAME, name);
	}

	public List findByRemark(Object remark) {
		return findByProperty(REMARK, remark);
	}

	public List findByTotal(Object total) {
		return findByProperty(TOTAL, total);
	}

	public List findByPrice(Object price) {
		return findByProperty(PRICE, price);
	}

	public List findByGoodsSeq(Object goodsSeq) {
		return findByProperty(GOODS_SEQ, goodsSeq);
	}

	public List findByCtTime(Object ctTime) {
		return findByProperty(CT_TIME, ctTime);
	}

	public List findByBuyer(Object buyer) {
		return findByProperty(BUYER, buyer);
	}

	public List findByProducer(Object producer) {
		return findByProperty(PRODUCER, producer);
	}

	public List findByDetailSeq(Object detailSeq) {
		return findByProperty(DETAIL_SEQ, detailSeq);
	}

	public List findByStorageType(Object storageType) {
		return findByProperty(STORAGE_TYPE, storageType);
	}

	public List findAll() {
		log.debug("finding all PmStorageDetails instances");
		try {
			String queryString = "from PmStorageDetails";
			return getHibernateTemplate().find(queryString);
		} catch (RuntimeException re) {
			log.error("find all failed", re);
			throw re;
		}
	}

	public PmStorageDetails merge(PmStorageDetails detachedInstance) {
		log.debug("merging PmStorageDetails instance");
		try {
			PmStorageDetails result = (PmStorageDetails) getHibernateTemplate()
					.merge(detachedInstance);
			log.debug("merge successful");
			return result;
		} catch (RuntimeException re) {
			log.error("merge failed", re);
			throw re;
		}
	}

	public void attachDirty(PmStorageDetails instance) {
		log.debug("attaching dirty PmStorageDetails instance");
		try {
			getHibernateTemplate().saveOrUpdate(instance);
			log.debug("attach successful");
		} catch (RuntimeException re) {
			log.error("attach failed", re);
			throw re;
		}
	}

	public void attachClean(PmStorageDetails instance) {
		log.debug("attaching clean PmStorageDetails instance");
		try {
			getHibernateTemplate().lock(instance, LockMode.NONE);
			log.debug("attach successful");
		} catch (RuntimeException re) {
			log.error("attach failed", re);
			throw re;
		}
	}

	public static PmStorageDetailsDAO getFromApplicationContext(
			ApplicationContext ctx) {
		return (PmStorageDetailsDAO) ctx.getBean("PmStorageDetailsDAO");
	}
}